linux 中 xxx not found 问题的一般解决思路与 bibtex 无法找到依赖文件示例
在 linux 中工作时,常常会遇到找不到文件的问题。这个文件可能是可执行文件,也可能是配置文件,或驱动文件等等。这类问题很常见,它们有相同的解决思路,具体步骤如下:
确认文件是否存在
sudo updatedb
locate filename
未安装 locate 命令时,可以通过 find 来查找文件(这通常会花费较长时间)。
文件存在
这里可能存在的问题是缺少某些库文件,或者没有设定某个环境变量,其它情况视具体情况而定。其中又以没有设定环境变量(使用系统默认值)问题为多,这时可以查看程序的帮助文档中 ENVIRONMENT 部分的叙述,根据叙述设定环境变量,并将环境变量的设定放到 用户或系统的 bash 配置文件中, 就能解决问题。
缺少库的情况可以通过安装库的方式来解决,具体需要安装哪个库请谷歌或百度。
文件不存在
当文件不存在时,可以以错误信息在百度或谷歌中检索,确定需要下载的文件或安装包,安装缺失的包或将文件放到正确的位置便能够解决问题。对于缺少包的问题,如果 apt-get 或 yum 无法找到安装包,那么首先更新源,然后 update,这之后再次进行安装,仍旧无法找到包,那么可以在网络上寻找。
下面是环境变量文设定导致程序执行失败的一个具体示例:
bibtex无法找到.bst与.bib文件的问题
在使用 beamer 文档类编写 ppt 文档的时候,使用 bibtex 生成参考文献时发生错误,错误提示找不到 plain.bst style 文件与我引用的 math.bib 文件。
使用 locate 在本地磁盘中查找相关文件发现这些文件存在,既然这样那么我想应该是没有设定 bibtex 程序使用的环境变量导致的问题。man bibtex,在 manual 中发现了三个相关变量。
BSTINPUTS 以该变量指定的 path 查找 .bst 文件,未设置该变量则使用系统默认路径查找。设置该变量后成功找到 plain.bst style 文件。
BSTINPUTS 以该变量指定的 path 查找 .bib 文件,未设置该变量则使用系统默认路径查找。设置该变量后成功找到 math.bib 文件。
TEXMFOUTPUT 当 bibtex 无法将输出文件放到当前目录时,会尝试将文件放到该变量指定的路径。
问题解决!
上面的例子也说明了环境变量的重要性。我们很多时候都只关心命令行参数,而忽略了环境变量对程序执行的影响。就 c 语言来讲,除了常见的 argc 与 argv 所表示的命令行参数表之外,还存在着 environ 环境变量表。不依赖特定环境变量的程序不容易出现问题,依赖特定环境变量的程序在环境变量缺失时可能会产生严重错误,这可以说是依赖造成的问题。
默认的环境变量设定并不能解决所有问题,有时候你必须自己配置环境变量,在这种问题产生时环境变量的作用就显得十分重要了。
要真正控制程序执行的话,程序的执行环境也应该得到考虑。更进一步的讨论可以参考 《APUE》第三版第7章的内容。